package com.rustic.server.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.rustic.server.po.Attractions;
import com.rustic.server.query.AttractionsAdminListQuery;
import com.rustic.server.query.AttractionsUserListQuery;
import com.rustic.server.vo.AttractionsVO;
import com.rustic.server.vo.AttractionsWebVO;
import com.rustic.server.vo.list.AttractionsAdminListVO;
import com.rustic.server.vo.list.AttractionsWebListVO;

import java.util.List;
import java.util.Map;

/**
 * 表[attractions]对应的服务类
 *
 * @author auto
 */

public interface AttractionsService extends IService<Attractions> {

    String ATTRACTIONS_NOT_EXIST = "景点不存在";

    /**
     * 查询（根据ID 批量查询）
     *
     * @param idList id列表
     * @return 景点列表
     */
    List<Attractions> listByIdIn(List<Integer> idList);

    /**
     * 查询（根据ID 批量查询）并转换成Map
     *
     * @param idList id列表
     * @return 景点列表
     */
    Map<Integer, Attractions> mapByIdIn(List<Integer> idList);

    /**
     * 管理列表查询条件
     *
     * @param query 查询参数
     * @return 查询条件
     */
    LambdaQueryWrapper<Attractions> toAdminListWrapper(AttractionsAdminListQuery query);

    /**
     * toAdminListVo
     *
     * @param attractionsList attractionsList
     * @return AdminListVO
     */
    List<AttractionsAdminListVO> toAdminListVo(List<Attractions> attractionsList);

    /**
     * toWebListVo
     *
     * @param attractionsList attractionsList
     * @param userId          用户id
     * @return WebListVo
     */
    List<AttractionsWebListVO> toWebListVo(List<Attractions> attractionsList, int userId);

    /**
     * 前台用户查询景点列表
     *
     * @param query 查询条件参数
     * @return 查询条件
     */
    LambdaQueryWrapper<Attractions> toWebListWrapper(AttractionsUserListQuery query);

    /**
     * 添加景点
     *
     * @param attractions attractions
     */
    void add(Attractions attractions);

    /**
     * 更新景点
     *
     * @param attractions attractions
     */
    void updateAttractions(Attractions attractions);

    /**
     * 根据id获取景点详情
     *
     * @param id id
     * @return AttractionsVO
     */
    AttractionsVO getDetailById(int id);

    /**
     * 景点发布下架
     *
     * @param id id
     * @return 返回修改后的状态
     */
    int enabled(int id);

    /**
     * 前台详情展示
     *
     * @param id 景点id
     * @return AttractionsVO
     */
    AttractionsWebVO getByIdToWeb(int id);
}
